
/** 
 * 部门-用户
 */

import React from "react"
import * as apis from "@/apis";

export default function useDepartments() {

    // 是否在加载
    const [loading, setLoading] = React.useState<string[]>([]);

    // 是否启动
    const [isStart, setStart] = React.useState(false);

    // 父亲节点
    const [parent, setParent] = React.useState<any[]>([]);

    // 当前部门列表
    const [departmentsList, setDepartmentsList] = React.useState<any[]>([]);

    /** 进入一个部门 */
    const go = React.useCallback((dept: any) => {
        const p = parent.indexOf(dept);
        if (p === -1) {
            setParent([...parent, dept]);
        } else {
            setParent(parent.slice(0, p + 1));
        }
    }, [parent])

    // 获取部门
    React.useEffect(() => {
        if (!isStart) return;
        (async () => {
            const dept_id = parent[parent.length - 1]?.dept_id

            setLoading(e => [...e, 'list']);
            try {
                const api = await apis.departments.list.get(dept_id);
                setDepartmentsList(api || [])
            } catch (error) {
                console.error(error)
                setDepartmentsList([])
            }

            setLoading(e => e.filter(e => e !== 'list'));

            // if (api.err) {

            // } else {
            //     try {

            //     } catch (error) {
            //         setDepartmentsList([])
            //     }
            // }
        })()
    }, [isStart, parent])

    return React.useMemo(() => {
        return {
            /** 设置是否启动 */
            setStart,

            /** 父亲节点 */
            parent,

            /** 设置父亲节点 */
            setParent,

            /** 进入一个部门 */
            go,

            /** 当前部门列表 */
            departmentsList,

            /** 是否在加载 */
            loading,
        }
    }, [departmentsList, go, loading, parent])
}